function f(){
echo $f; }
f();
21 תשובות
global $f;
echo $f;
}
או
echo $GLOBALS['f'];
}
חחחחחחח תמיד אתה שואל את זה
אני עושה פונקציה שחוזרת על עצמה לפחות 50 פעם וכל פעם שהיא עולה היא פותחת את הפונקציה TIME
ולפתוח אותה כל פעם מחדש יכול לתת תוצאות שונות או סתם להעמיס אז אני שומר אותה במשתנה מסוים וככה היא לא תשתנה לאורך כל הפעמים שהפונקציה שלי תופעל
ד"א עובד מעולה!!
חח מה הקשר עכשיו ולמה??
הגלובל עוזר לי להגיע אל המשתנה החיצוני מה רע בו..??
כי עד עכשיו בכל הדפים שלי השתמשתי ב2 פרמטרים..
ובדף INCLUDE יש את הפונקציה כבר וגם את המשתנה $curtime שהגדרתי ובו נמצא הזמן המקורי ששיך לכל הדף וכל הדף בעצם מתבסס על אותו TIME
הבנתי. אם נמשיך לא להסתכל לכיוון object oriented
אפשר אולי לגנוב משם מילה אחת שתתאים לך יותר בצורה הבאה:
function doSomething()
{
static $time = null;
if(null === $time) $time = time();
echo $time, "<br/>";
}
doSomething();
sleep(2);
doSomething();
static גורמת לזה שהמשתנה הזה יהיה משותף לכל הקריאות של הפונקציה לא משנה מי ומתי קרה לה.
ככה שהערך של time$ משתמר בין הקריאות.
וואי אין לי מושג מה אני רואה פה ולמה הBOOLEAN שלך הוא null === $time זה אמור להיות הפוך לא??
ולמה השתמשת בSLEEP זה לא כדי להריץ זמן??
בכל מקרה חחחח אפשר הסבר נוסף או בכלל מדריך לזה
מה ההבדל בין
לא, אי אפשר "להריץ" זמן עדיין, אבל אפשר לבדוק בדוקמנטציה מה sleep עושה, שזה פשוט לעצור את הסקריפט, לחכות כמה שניות ואז להמשיך.
למה השתמשתי בה? כדי להדגים שהערך של המשתנה time$ משתמר ולא נכנס לתוכו ערך חדש בכל קריאה לפונקציה.
קודם כל אני זוכר כשלמדתי תכנות בכלל הייתה הדגשה שמשפט בתכנות הוא לא כמו מתמטיקה למשל
לא כותבים
שבתכנות זה אומר ש"4" יכיל את הערך $VAR ולכן הסדר משנה כשמדובר במשתנה ובערך
ובמקרה שהבאת באמת אין בעיה כי שניהם משתנים אבל קודם כתבת
זה נראה לי צריך להיות ההפך..
בכל מקרה עוד משהו אמרת שSLEEP זה עוצר את הסקריפט זה בעצם כמו SETTIMEOUT??
אבל אם עושים דבר כזה זה לא יתקע את כל הדף עד שהסקריפט יסתיים?? כי בכל זאת זאת שפת שרת לא שפה כמו JS שרצה בדפדפן
ולגבי הקוד שהבאת אתה יכול להסביר לי מה זה STATIC בבקשה
נכון שאתה לא יכול לשים ערך כלשהו בתוך המספר 4, אבל לבדוק האם 4 שווה ל X או האם X שווה ל 4 זה אותו דבר.
static גורמת לזה שהמשתנה הזה יהיה משותף לכל הקריאות של הפונקציה לא משנה מי ומתי קרה לה.
yoda syntax ftw
ו-global זה רע כיוון שזה מסתיר תלות של פונקציה באלמנט כלשהו. במקום זה, אתה יכול להעביר את האלמנט כפרמטר או ללמוד oop ולעשות מאפיין שיהיה נגיש לכל מתודה.
אהה הבנתי
2 שאלות אחרונות :)
למה STATIC עדיף על GLOBAL ומה ההבדל בניהם ,מבחינת מה שאני רוצה לעשות? (במי כדאי להשתמש ולמה לא כדאי בכלל להשתמש בGLOBAL באופן כללי)
למה STATIC לא מקבל פונקציה static $time = time();
שהרי זה בעצם מה שניסית לכתוב אבל אם אני כותב ישר פונקציה השרת מחזיר שגיאה
אין קשר בין global ל-static.
static מגדיר משתנה פעם אחת בלבד.
ואתה לא יכול לתת כערך למאפיין של קלאס (בין אם הוא סטטי או לא) ערך שהוא חישוב כלשהו, או פונקציה כלשהי או משתנה כלשהו, כי php לא מבצע את כל אלה בזמן קומפילציה.
ואם תקרא את ההודעה שמעל להודעה שלך תראה את התשובה ל-global.
yoda syntax ftw
ו-global זה רע כיוון שזה מסתיר תלות של פונקציה באלמנט כלשהו. במקום זה, אתה יכול להעביר את האלמנט כפרמטר או ללמוד oop ולעשות מאפיין שיהיה נגיש לכל מתודה.
ע"פ מה שאתה אומר הבנתי שהבעיה בגלובל שהוא אינו פרמטר בפונקציה ושאם הוא לא קיים אז הפונקציה נופלת..
אם הבנתי נכון אז זה באמת לא משנה לי למרות שאם זה היה משנה הייתי יכול להוסיף
ISSET ולעשות RETURN FALSE בכל מקרה אם זאת הבעיה היחידה אז מה הבעיה להשתמש בזה במקום STATIC..
הבעיה היא שהפונקצייה שלך תלוייה במשהו, ועם בגלובאל אתה מסתיר את התלות הזאת. יכולות להיות לך כמה פונקציות שתלויות באותו הדבר, לכן צריך לבנות מחלקה או מבנה לוגי כלשהו שיחבר בין התלויות. גלובאל זה פתרון "בדרך" ו"בחפיף" - הוא יוצר בלאגן. זה פרקטיקה גרועה.
ומה הקשר בכלל ל-static? זה דברים שונים לגמרי.
global מחפש מרכיב כלשהו בטוח גלובאלי (global scope).
static מגדיר משתנה פעם אחת בלבד. ככה שאם אתה מגדיר משתנה כסטטי בתוך הפונקציה, המשתנה הזה יווצר פעם אחת בזכרון, וכל פעולה שתעשה על המשתנה הזה תבוצע על אותו תא בזכרון.
אני יודע שהם שונים לגמריי אחד מהשני!!!!!
התכוונתי שבמקרה שלי ששם אני יכול להשתמש בGLOBAL או בSTATIC ואז אין הבדל בתוצאה
אז אני שאלתי מה יותר יעיל מבחינת מהירות במקרה שלי
ולגבי התלות הסברתי לך שזה לא משנה לי המשתנה הזה תמיד זמין ומוגדר אין בעיה עם זה
איזה בעיות יכולות להיגרם ממנו ששימוש בSTATIC ימנע?